#ifndef DATA_HANDLE_LIB_H
#define DATA_HANDLE_LIB_H

#include "interface_emum.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct
{
    unsigned int block_type;
    unsigned int block_size;
    unsigned char *block_ptr;
} data_blk_typedef;
/*************************************************
data_blk_typedef结构采用四字节对齐方式

1.设置串口参数(小端模式)
block_type:ENMUM_UART_X(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:用户提供的存放数据的缓冲区的指针,前四字节对应波特率,后四字节对应帧头

2.通过串口发送数据(小端模式)
block_type:ENMUM_UART_X(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:用户提供的存放数据的缓冲区的指针

注:以上1和2因为调用的函数接口不同,因此不用在block_type上做区分

3.通过串口读取数据(小端模式)
block_type:用户填写ENMUM_UART_X(见interface_emum.h)代表需要发送的端口,返回0xa0表示该帧为数据帧,返回0xa1表示该帧为状态帧
block_size:用户填写缓冲区长度，实际返回读取的数据长度
block_ptr:用户提供的存放数据的缓冲区的指针

4.获取srio0接口数据(小端模式)
block_type:ENMUM_SRIO_0(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:srio0数据块指针,数据库长度等于端口初始化时给定的block_size

5.获取srio0接口数据(小端模式)
block_type:ENMUM_SRIO_1(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:srio1数据块指针,数据库长度等于端口初始化时给定的block_size

6.获取sdi0接口数据(小端模式)
block_type:ENMUM_SDI_0(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:sdi0数据块指针,数据库长度等于端口初始化时给定的block_size

7.获取sdi1接口数据(小端模式)
block_type:ENMUM_SDI_1(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:sdi0数据块指针,数据库长度等于端口初始化时给定的block_size

8.获取NET接口数据(小端模式)
block_type:ENMUM_NET_DATA(见interface_emum.h)
block_size:block_ptr指针指向的数据块长度
block_ptr:NET数据块指针,数据库长度等于端口初始化时给定的block_size
*************************************************/
/*
env_initial():设置软件运行需要的环境
*/
extern int env_initial(unsigned int dma_channel_number,unsigned int user_channel_number,unsigned int block_num, unsigned int block_size);

/*
env_deinitial():清除env_initial设置
*/
extern void env_deinitial(void);

/*
interface_initial():端口设置，包括串口，can
*/
extern int interface_initial(data_blk_typedef *data_blk);

/*
read_data():读取指定端口数据
*/
extern int read_data(data_blk_typedef *data_blk);
/*
read_data():往指定端口写数据
*/
extern int write_data(data_blk_typedef *data_blk);

/*
transfer_start():大数据量端口的数据通道开启，这些端口包括SDI0,SDI1,SRIO0,SRIO1,千兆网
*/
extern int transfer_start(void);

/*
transfer_start():大数据量端口的数据通道关闭，这些端口包括SDI0,SDI1,SRIO0,SRIO1,千兆网
*/
extern int transfer_stop(void);
/*
重启IO板,重启以后ubuntu也需要重启
*/
extern int reboot_io_board(void);
/*
更新z7固件的接口
*/
extern int update_flash_write(data_blk_typedef *data_blk);
#ifdef __cplusplus
}
#endif
#endif
